package com.excise01;

/**
 * Created by 54416 on 2017/5/21.
 */

/**
 * Implement pow(x, n).
 * 最简单的办法是根据n进行循环并计算乘积，但是这样的时间开销比较大。最好能够再减少循环次数，例如n4可以表示成（n2）2。
 * 将n表示成二进制的格式便能够轻松知道如何减少循环次数。
 */
public class Power {
    //for循环输出结果
    public double power(double x,int y){
        if (x == 0){
            return 0;
        }else if (y == 0){
            return 1;
        }else if (y<0){
            x = 1/x;
            y = -y;
        }
        double result = 1;
        for (int i=0; i<y; i++){
            result *=x ;
        }
        return result;
    }
    //减少循环次数
    public double power2(double x,int y){
        if (x == 0){
            return 0;
        }else if (y == 0){
            return 1;
        }else if (y<0){
            x = 1/x;
            y = -y;
        }
        double result = 1;
        while (y>0){
            if (y%2 == 1){
                  result*=x;
            }
            y/=2;
            x*=x;
        }
        return result;
    }


    public static void main(String[] args) {
        Power p = new Power();
        System.out.println(p.power2(2,-4));

    }
}
